// axios 二次封装
import axios from "axios"
import { showToast, closeToast } from 'vant';
// import useUserStore from "@/store/user";

// 创建 axios 实例
const service = axios.create({
    baseURL: 'http://162.14.108.31:3000', //所有接口的 url 基准地址
    timeout: 10000, //超时时间
})

// 请求拦截
service.interceptors.request.use(
    (config) => {

        // const store = useUserStore()

        // 提示请求数据加载
        showToast({
            type: 'loading',
            message: '加载中...',
            duration: 0, //设置为0，则提示框不会自动关闭，需要后期手动关闭
        })

        // 其它请求拦截业务：添加请求头的 token 认证
        // const token = store.token
        // if (token) {
        //     config.headers.token = store.token
        // }

        return config
    },
    (err) => {
        // 拦截异常
        showToast({
            type: 'fail',
            message: '请求拦截异常:' + err,
        })
    }
)

// 响应拦截
service.interceptors.response.use(
    (response) => {
        //关闭数据加载轻提示的效果
        closeToast(true)


        //response 是 axios 对服务端接口响应的一个包装对象
        // status 属性表示http响应状态码
        // data 属性表示后端向前端响应返回的主体数据

        // 通常后端向前端返回数据有统一的格式规范，比如：{ code, data ,message}
        // 在响应拦截中可统一对返回数据进行格式处理
        const responseData = response.data
        if (responseData.code === 200) {
            return responseData.data
        }
        return Promise.reject(new Error(responseData.message))
    },
    (err) => {
        // 响应拦截异常
        showToast({
            type: 'fail',
            message: '响应拦截异常:' + err,
        })
    }
)

export default service